Ajax এর মাধ্যমে ডাটাবেস থেকে ডেটা রিকোয়েস্ট করা একটি সাধারণ এবং কার্যকরী পদ্ধতি, যা ওয়েব অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ এবং রেসপন্সিভ করে তোলে। Ajax এর মাধ্যমে একটি ক্লায়েন্ট-সাইড রিকোয়েস্ট সার্ভারে পাঠানো হয়, যেখানে PHP স্ক্রিপ্ট ডাটাবেস থেকে ডেটা ফেচ করে এবং রেসপন্স হিসাবে JSON বা HTML আউটপুট করে পাঠায়। ক্লায়েন্ট সাইডে সেই ডেটা প্রসেস করে ডায়নামিকভাবে UI-তে দেখানো হয়।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ajax Database Request Example</title>
</head>
<body>
<h1>Employee List</h1>
<button onclick="fetchEmployeeData()">Fetch Employees</button>
<div id="employee-container">
<!-- ডেটা এখানে দেখানো হবে -->
</div>
<script>
function fetchEmployeeData() {
// XMLHttpRequest অবজেক্ট তৈরি করা
var xhr = new XMLHttpRequest();
// GET রিকোয়েস্ট ওপেন করা
xhr.open("GET", "fetch_employees.php", true);
// রেসপন্স হ্যান্ডলিং সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // রিকোয়েস্ট সম্পূর্ণ হলে
if (xhr.status === 200) { // রিকোয়েস্ট সফল হলে
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
var output = "<h2>Employees:</h2><ul>";
data.forEach(function(employee) {
output += `<li>${employee.name} - ${employee.email}</li>`;
});
output += "</ul>";
document.getElementById("employee-container").innerHTML = output;
} else {
document.getElementById("employee-container").innerHTML = "Error fetching data.";
}
}
};
// ত্রুটি হ্যান্ডলিংয়ের জন্য onerror ইভেন্ট হ্যান্ডলার সেট করা
xhr.onerror = function() {
document.getElementById("employee-container").innerHTML = "Network error occurred. Please try again.";
};
// রিকোয়েস্ট পাঠানো
xhr.send();
}
</script>
</body>
</html>
বিস্তারিত ব্যাখ্যা:
<h1>
), একটি বোতাম (<button>
), এবং একটি <div>
এলিমেন্ট রয়েছে।fetchEmployeeData()
ফাংশন কল হবে, যা Ajax এর মাধ্যমে fetch_employees.php
ফাইলে একটি GET রিকোয়েস্ট পাঠাবে।employee-container
নামে একটি <div>
এলিমেন্ট রয়েছে, যেখানে PHP স্ক্রিপ্ট থেকে প্রাপ্ত ডেটা বা ত্রুটি মেসেজ দেখানো হবে।<?php
// ডাটাবেস কানেকশন সেটআপ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company_db";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Database connection failed."]);
exit();
}
// SQL কুয়েরি
$sql = "SELECT name, email FROM employees";
$result = $conn->query($sql);
// ডেটা রেসপন্স তৈরি করা
$employees = array();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$employees[] = $row;
}
}
// JSON ফরম্যাটে হেডার সেট করা
header('Content-Type: application/json');
// JSON ফরম্যাটে ডেটা রিটার্ন করা
echo json_encode($employees);
// ডাটাবেস কানেকশন বন্ধ করা
$conn->close();
?>
বিস্তারিত ব্যাখ্যা:
localhost
এ MySQL সার্ভার কানেক্ট করা হয়েছে।employees
টেবিল থেকে name
এবং email
কলামগুলো ফেচ করা হয়েছে।$employees
অ্যারেতে স্টোর করা হয়েছে।json_encode()
ফাংশন ব্যবহার করে ডেটা JSON ফরম্যাটে কনভার্ট করা হয়েছে এবং PHP এর header('Content-Type: application/json');
দিয়ে JSON হেডার সেট করা হয়েছে।ডাটাবেসের নাম company_db
এবং টেবিলের নাম employees
। টেবিলের একটি সিম্পল স্ট্রাকচার:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
fetchEmployeeData()
ফাংশন কল হয়।fetch_employees.php
এ।Ajax এবং PHP এর মাধ্যমে ডাটাবেসে কুয়েরি করা একটি শক্তিশালী এবং প্রয়োজনীয় পদ্ধতি, যা ওয়েব অ্যাপ্লিকেশনকে আরও ডায়নামিক এবং ইন্টারেক্টিভ করে তোলে। এই পদ্ধতিতে, Ajax রিকোয়েস্টের মাধ্যমে ক্লায়েন্ট সাইড থেকে PHP স্ক্রিপ্টে ডেটা পাঠানো হয়, এবং PHP সেই ডেটার ভিত্তিতে ডাটাবেসে কুয়েরি চালায়। এরপর, কুয়েরির ফলাফল Ajax এর মাধ্যমে ক্লায়েন্ট সাইডে পাঠানো হয় এবং UI-তে প্রদর্শিত হয়।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Database Query with Ajax</title>
</head>
<body>
<h1>Search Employee</h1>
<form id="searchForm">
<label for="name">Enter Employee Name:</label>
<input type="text" id="name" name="name" required>
<button type="button" onclick="searchEmployee()">Search</button>
</form>
<div id="result-container">
<!-- রেসপন্স বা ত্রুটি মেসেজ এখানে দেখানো হবে -->
</div>
<script>
function searchEmployee() {
var name = document.getElementById('name').value;
// XMLHttpRequest অবজেক্ট তৈরি করা
var xhr = new XMLHttpRequest();
// POST রিকোয়েস্ট ওপেন করা
xhr.open("POST", "search_employee.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// রেসপন্স হ্যান্ডলিং সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
document.getElementById("result-container").innerHTML = xhr.responseText;
} else {
document.getElementById("result-container").innerHTML = "Error fetching data.";
}
}
};
// ত্রুটি হ্যান্ডলিংয়ের জন্য onerror ইভেন্ট হ্যান্ডলার সেট করা
xhr.onerror = function() {
document.getElementById("result-container").innerHTML = "Network error occurred. Please try again.";
};
// রিকোয়েস্ট পাঠানো
xhr.send("name=" + encodeURIComponent(name));
}
</script>
</body>
</html>
বিস্তারিত ব্যাখ্যা:
<form>
) তৈরি করা হয়েছে, যেখানে ইউজার একটি এমপ্লয়ির নাম প্রবেশ করতে পারে। "Search" বোতামে ক্লিক করলে searchEmployee()
ফাংশন কল হবে, যা Ajax POST রিকোয়েস্টের মাধ্যমে PHP স্ক্রিপ্টে ডেটা পাঠাবে।result-container
নামে একটি <div>
এলিমেন্ট রয়েছে, যেখানে PHP স্ক্রিপ্ট থেকে প্রাপ্ত ডেটা বা ত্রুটি মেসেজ দেখানো হবে।<?php
// ফর্ম থেকে ডেটা সংগ্রহ করা
$name = trim($_POST['name']);
// ভ্যালিডেশন চেক করা
if (empty($name)) {
http_response_code(400); // Bad Request
echo "Please enter a name.";
exit();
}
// ডাটাবেস কানেকশন সেটআপ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company_db";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo "Database connection failed.";
exit();
}
// SQL কুয়েরি
$sql = "SELECT name, email, department FROM employees WHERE name LIKE ?";
$stmt = $conn->prepare($sql);
$searchTerm = "%" . $name . "%";
$stmt->bind_param("s", $searchTerm);
$stmt->execute();
$result = $stmt->get_result();
// ডেটা রেসপন্স তৈরি করা
if ($result->num_rows > 0) {
echo "<h2>Search Results:</h2><ul>";
while ($row = $result->fetch_assoc()) {
echo "<li>Name: " . $row['name'] . ", Email: " . $row['email'] . ", Department: " . $row['department'] . "</li>";
}
echo "</ul>";
} else {
echo "No employees found with the name: " . htmlspecialchars($name);
}
// কানেকশন বন্ধ করা
$stmt->close();
$conn->close();
?>
বিস্তারিত ব্যাখ্যা:
$_POST
দিয়ে ডেটা সংগ্রহ করা হয়েছে এবং trim()
ফাংশন দিয়ে ইনপুট পরিষ্কার করা হয়েছে।400
(Bad Request) রিটার্ন করা হয়েছে।LIKE
অপারেটর ব্যবহার করে SQL কুয়েরি তৈরি করা হয়েছে, যা ইউজারের ইনপুট অনুযায়ী নাম মিলিয়ে ডেটা ফেচ করে।prepare()
মেথড ব্যবহার করে কুয়েরি প্রিপেয়ার করা হয়েছে এবং bind_param()
দিয়ে প্যারামিটার বাউন্ড করা হয়েছে।ডাটাবেসের নাম company_db
এবং টেবিলের নাম employees
। টেবিলের একটি সিম্পল স্ট্রাকচার:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
department VARCHAR(100) NOT NULL
);
searchEmployee()
ফাংশন কল হয়।search_employee.php
এ, যেখানে ব্যবহারকারীর ইনপুট পাঠানো হয়।result-container
ডিভে ইনজেক্ট করা হয়।Ajax এবং PHP ব্যবহার করে ডাটাবেস থেকে ডেটা ফেচ করে HTML টেবিলে প্রদর্শন করা একটি কার্যকরী পদ্ধতি, যা ওয়েব অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ এবং রেসপন্সিভ করে তোলে। এই প্রক্রিয়ায়, Ajax এর মাধ্যমে ডাটাবেস থেকে ডেটা ফেচ করা হয় এবং সেই ডেটা HTML টেবিলে ডায়নামিকভাবে রেন্ডার করা হয়।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fetch Data and Display in Table</title>
</head>
<body>
<h1>Employee List</h1>
<button onclick="fetchEmployeeData()">Fetch Employees</button>
<table id="employee-table" border="1" style="width: 100%; margin-top: 20px; display: none;">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Department</th>
</tr>
</thead>
<tbody>
<!-- ডেটা এখানে ডায়নামিক্যালি যোগ করা হবে -->
</tbody>
</table>
<div id="response-container">
<!-- রেসপন্স বা ত্রুটি মেসেজ এখানে দেখানো হবে -->
</div>
<script>
function fetchEmployeeData() {
// XMLHttpRequest অবজেক্ট তৈরি করা
var xhr = new XMLHttpRequest();
// GET রিকোয়েস্ট ওপেন করা
xhr.open("GET", "fetch_employees.php", true);
// রেসপন্স হ্যান্ডলিং সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // রিকোয়েস্ট সম্পূর্ণ হলে
if (xhr.status === 200) { // রিকোয়েস্ট সফল হলে
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
var table = document.getElementById("employee-table");
var tbody = table.querySelector("tbody");
tbody.innerHTML = ""; // পূর্বের ডেটা ক্লিয়ার করা
data.forEach(function(employee) {
var row = document.createElement("tr");
row.innerHTML = `<td>${employee.name}</td>
<td>${employee.email}</td>
<td>${employee.department}</td>`;
tbody.appendChild(row);
});
table.style.display = "table"; // টেবিল দেখানো
} else {
document.getElementById("response-container").innerHTML = "Error fetching data.";
}
}
};
// ত্রুটি হ্যান্ডলিংয়ের জন্য onerror ইভেন্ট হ্যান্ডলার সেট করা
xhr.onerror = function() {
document.getElementById("response-container").innerHTML = "Network error occurred. Please try again.";
};
// রিকোয়েস্ট পাঠানো
xhr.send();
}
</script>
</body>
</html>
বিস্তারিত ব্যাখ্যা:
<button>
) রয়েছে যা "Fetch Employees" নামে। এই বোতামে ক্লিক করলে fetchEmployeeData()
ফাংশন কল হবে।<table>
এলিমেন্ট তৈরি করা হয়েছে যাতে ডাটাবেস থেকে প্রাপ্ত ডেটা HTML টেবিলে দেখানো যায়।XMLHttpRequest
অবজেক্ট ব্যবহার করা হয়েছে। রেসপন্স সফল হলে, JSON ডেটা প্রসেস করে HTML টেবিলে যোগ করা হয়।<?php
// ডাটাবেস কানেকশন সেটআপ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company_db";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Database connection failed."]);
exit();
}
// SQL কুয়েরি
$sql = "SELECT name, email, department FROM employees";
$result = $conn->query($sql);
// ডেটা রেসপন্স তৈরি করা
$employees = array();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$employees[] = $row;
}
}
// JSON ফরম্যাটে হেডার সেট করা
header('Content-Type: application/json');
// JSON ফরম্যাটে ডেটা রিটার্ন করা
echo json_encode($employees);
// ডাটাবেস কানেকশন বন্ধ করা
$conn->close();
?>
বিস্তারিত ব্যাখ্যা:
SELECT
কুয়েরি ব্যবহার করে employees
টেবিল থেকে name
, email
, এবং department
কলামগুলো ফেচ করা হয়েছে।json_encode()
ফাংশন ব্যবহার করে JSON ফরম্যাটে রেসপন্স রিটার্ন করা হয়েছে।header('Content-Type: application/json');
দিয়ে JSON হেডার সেট করা হয়েছে, যাতে ব্রাউজার এবং ক্লায়েন্ট জানে যে এটি একটি JSON রেসপন্স।ডাটাবেসের নাম company_db
এবং টেবিলের নাম employees
। টেবিলের একটি সিম্পল স্ট্রাকচার:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
department VARCHAR(100) NOT NULL
);
fetchEmployeeData()
ফাংশন কল হয়।fetch_employees.php
এ।Ajax এবং MySQL এর সংযোগ করা একটি সাধারণ এবং কার্যকর পদ্ধতি, যা ওয়েব অ্যাপ্লিকেশনকে ডাইনামিক এবং ইন্টারেক্টিভ করে তোলে। Ajax এর মাধ্যমে ডেটা ক্লায়েন্ট সাইড থেকে PHP স্ক্রিপ্টে পাঠানো হয়, যেখানে PHP MySQL ডাটাবেসে কুয়েরি চালায় এবং প্রাপ্ত ফলাফল Ajax এর মাধ্যমে ব্রাউজারে ফেরত পাঠায়।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ajax and MySQL Connection Example</title>
</head>
<body>
<h1>Employee Data Search</h1>
<form id="employeeForm">
<label for="employeeId">Enter Employee ID:</label>
<input type="number" id="employeeId" name="employeeId" required>
<button type="button" onclick="fetchEmployeeData()">Search</button>
</form>
<div id="response-container">
<!-- রেসপন্স বা ত্রুটি মেসেজ এখানে দেখানো হবে -->
</div>
<script>
function fetchEmployeeData() {
var employeeId = document.getElementById('employeeId').value;
// XMLHttpRequest অবজেক্ট তৈরি করা
var xhr = new XMLHttpRequest();
// POST রিকোয়েস্ট ওপেন করা
xhr.open("POST", "fetch_employee.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// রেসপন্স হ্যান্ডলিং সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
document.getElementById("response-container").innerHTML = xhr.responseText;
} else {
document.getElementById("response-container").innerHTML = "Error fetching data.";
}
}
};
// ত্রুটি হ্যান্ডলিংয়ের জন্য onerror ইভেন্ট হ্যান্ডলার সেট করা
xhr.onerror = function() {
document.getElementById("response-container").innerHTML = "Network error occurred. Please try again.";
};
// রিকোয়েস্ট পাঠানো
xhr.send("employeeId=" + encodeURIComponent(employeeId));
}
</script>
</body>
</html>
বিস্তারিত ব্যাখ্যা:
fetchEmployeeData()
ফাংশন কল হবে, যা Ajax POST রিকোয়েস্ট পাঠিয়ে PHP স্ক্রিপ্টে ডেটা পাঠাবে।response-container
নামে একটি <div>
এলিমেন্ট রয়েছে, যেখানে PHP স্ক্রিপ্ট থেকে প্রাপ্ত রেসপন্স বা ত্রুটি মেসেজ দেখানো হবে।<?php
// ডাটাবেস কানেকশন সেটআপ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company_db";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo "Database connection failed.";
exit();
}
// ইনপুট ডেটা সংগ্রহ করা
$employeeId = intval($_POST['employeeId']);
// SQL কুয়েরি তৈরি করা
$sql = "SELECT name, email, department FROM employees WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $employeeId);
$stmt->execute();
$result = $stmt->get_result();
// রেসপন্স তৈরি করা
if ($result->num_rows > 0) {
$employee = $result->fetch_assoc();
echo "<h2>Employee Details:</h2>";
echo "<p>Name: " . htmlspecialchars($employee['name']) . "</p>";
echo "<p>Email: " . htmlspecialchars($employee['email']) . "</p>";
echo "<p>Department: " . htmlspecialchars($employee['department']) . "</p>";
} else {
echo "No employee found with ID: " . htmlspecialchars($employeeId);
}
// কানেকশন বন্ধ করা
$stmt->close();
$conn->close();
?>
বিস্তারিত ব্যাখ্যা:
500
রিটার্ন করা হয়েছে।SELECT
কুয়েরি ব্যবহার করে employees
টেবিল থেকে name
, email
, এবং department
কলামগুলো ফেচ করা হয়েছে।prepare()
এবং bind_param()
মেথড ব্যবহার করে কুয়েরি প্রিপেয়ার করা হয়েছে এবং ইনপুট প্যারামিটার সিকিউরলি বাউন্ড করা হয়েছে।ডাটাবেসের নাম company_db
এবং টেবিলের নাম employees
। টেবিলের একটি সিম্পল স্ট্রাকচার:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
department VARCHAR(100) NOT NULL
);
fetchEmployeeData()
ফাংশন কল হয়।fetch_employee.php
এ, যেখানে ইনপুট ডেটা (employeeId) পাঠানো হয়।response-container
ডিভে ইনজেক্ট করা হয়।